[IA64] Fix HVM boot failure
authorAlex Williamson <alex.williamson@hp.com>
Wed, 6 Jun 2007 15:13:50 +0000 (09:13 -0600)
committerAlex Williamson <alex.williamson@hp.com>
Wed, 6 Jun 2007 15:13:50 +0000 (09:13 -0600)
HVM sometimes fails to boot with the message
"Guest nested fault vector=0x5400!".

The cause of this issue is that cr.ifs never be initialized in very
first context switching. To optimize hypercall on HVM, cr.ifs is only
set with the predicate pNonSys(pr5)=1.

Signed-off-by: Kouya Shimura <kouya@jp.fujitsu.com>
xen/arch/ia64/vmx/vmx_init.c

index e7562ce369156d037271ff41b4faac8955cd3bc8..1364e5bc3cef537a46151d60b483b82a27cba085 100644 (file)
@@ -51,6 +51,7 @@
 #include <asm/viosapic.h>
 #include <xen/event.h>
 #include <asm/vlsapic.h>
+#include "entry.h"
 
 /* Global flag to identify whether Intel vmx feature is on */
 u32 vmx_enabled = 0;
@@ -296,6 +297,7 @@ vmx_final_setup_guest(struct vcpu *v)
 {
        vpd_t *vpd;
        int rc;
+       struct switch_stack *sw;
 
        vpd = alloc_vpd();
        ASSERT(vpd);
@@ -331,6 +333,10 @@ vmx_final_setup_guest(struct vcpu *v)
        /* Set up guest 's indicator for VTi domain*/
        set_bit(ARCH_VMX_DOMAIN, &v->arch.arch_vmx.flags);
 
+       /* Initialize pNonSys=1 for the first context switching */
+       sw = (struct switch_stack *)vcpu_regs(v) - 1;
+       sw->pr = (1UL << PRED_NON_SYSCALL);
+
        return 0;
 }